Thực đơn
Lỗi tràn bộ nhớ đệm Khai thácCó các kỹ thuật khác nhau cho việc khai thác lỗi tràn bộ nhớ đệm, tùy theo kiến trúc máy tính, hệ điều hành và vùng bộ nhớ. Ví dụ, khai thác tại heap (dùng cho các biến cấp phát động) rất khác với việc khai thác các biến tại stack.
Một người dùng thạo kỹ thuật và có ý đồ xấu có thể khai thác các lỗi tràn bộ đệm trên stack để thao túng chương trình theo một trong các cách sau:
Nếu không biết địa chỉ của phần dữ liệu người dùng cung cấp, nhưng biết rằng địa chỉ của nó được lưu trong một thanh ghi, thì có thể ghi đè lên địa chỉ trả về một giá trị là địa chỉ của một opcode mà opcode này sẽ có tác dụng làm cho thực thi nhảy đến phần dữ liệu người dùng. Cụ thể, nếu địa chỉ đoạn mã độc hại muốn chạy được ghi trong một thanh ghi R, thì một lệnh nhảy đến vị trí chứa opcode cho một lệnh jump R
, call R
(hay một lệnh tương tự với hiệu ứng nhảy đến địa chi ghi trong R) sẽ làm cho đoạn mã trong phần dữ liệu người dùng được thực thi. Có thể tìm thấy địa chỉ của các opcode hay các byte thích hợp trong bộ nhớ tại các thư viện liên kết động (DLL) hay trong chính file thực thi. Tuy nhiên, địa chỉ của opcode đó thường không được chứa một ký tự null (hay byte 0) nào, và địa chỉ của các opcode này có thể khác nhau tùy theo các ứng dụng và các phiên bản của hệ điều hành. Dự án Metasploit là một trong các cơ sở dữ liệu chứa các opcode thích hợp, tuy rằng trong đó chỉ liệt kê các opcode trong hệ điều hành Microsoft Windows[2]
Một hiện tượng tràn bộ đệm xảy ra trong khu vực dữ liệu heap được gọi là một hiện tượng tràn heap và có thể khai thác được bằng các kỹ thuật khác với các lỗi tràn stack. Bộ nhớ heap được cấp phát động bởi các ứng dụng tại thời gian chạy và thường chứa dữ liệu của chương trình. Việc khai thác được thực hiện bằng cách phá dữ liệu này theo các cách đặc biệt để làm cho ứng dụng ghi đè lên các cấu trúc dữ liệu nội bộ chẳng hạn các con trỏ của danh sách liên kết. Lỗ hổng của Microsoft JPEG GDI+ là một ví dụ gần đây về sự nguy hiểm mà một lỗi tràn heap có thể dẫn đến.[3]
Việc xử lý bộ đệm trước khi đọc hay thực thi nó có thể làm thất bại các cố gắng khai thác lỗi tràn bộ đệm. Các xử lý này có thể giảm bớt mối đe dọa của việc khai thác lỗi, nhưng có thể không ngăn chặn được một cách tuyệt đối. Việc xử lý có thể bao gồm: chuyển từ chữ hoa thành chữ thường, loại bỏ các ký tự đặc biệt (metacharacters) và lọc các xâu không chứa ký tự là chữ số hoặc chữ cái. Tuy nhiên, có các kỹ thuật để tránh việc lọc và xử lý này; alphanumeric code (mã gồm toàn chữ và số), polymorphic code (mã đa hình), Self-modifying code (mã tự sửa đổi) và tấn công kiểu return-to-libc. Cũng chính các phương pháp này có thể được dùng để tránh bị phát hiện bởi các hệ thống phát hiện thâm nhập (Intrusion detection system).
Thực đơn
Lỗi tràn bộ nhớ đệm Khai thácLiên quan
Lỗi tràn bộ nhớ đệm Lỗi và hành vi sai trái (bóng đá) Lỗi y tế Lỗi cú pháp Lỗi phần mềm Lỗi tràn ngăn xếp Lỗi Dương Lỗi (bóng đá) Lỗi Off-by-one Lỗi tỷ kinhTài liệu tham khảo
WikiPedia: Lỗi tràn bộ nhớ đệm http://www.buffershield.com/english/products/produ... http://www.eeye.com/html/Research/Advisories/AL200... http://metasploit.com/users/opcode/msfopcode.cgi http://technet2.microsoft.com/WindowsServer/en/Lib... http://www.microsoft.com/technet/security/bulletin... http://www.microsoft.com/technet/security/bulletin... http://www.security-express.com/archives/bugtraq/1... http://world.std.com/~franl/worm.html http://www.syngress.com/book_catalog/327_SSPC/samp... http://arri.berlios.de/